<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
   /* ES6引入了let和const关键字，用于声明变量和常量。let声明的变量具有块级作用域，而const声明的常量是不可变的*/

/*   ES6引入了箭头函数，可以更简洁地定义函数。箭头函数没有自己的this，它的this继承自外部作用域。*/
const add=(x,y) => x+y;

let result=add(1,3);
console.info(result);
//alert(result);

   /*字符串模板*/
const  name='zhangsan';
const age=18;
let message=`my name is ${name},my age is ${age}`;
console.log(message);
 /*
   ``在tab键的上边
   在两个`之间的部分都会被作为字符串的值，不管你任意换行，甚至加入js脚本
   键盘是的1的左侧，tab的上侧，esc的正下方
 * */

let m1=`hello
 world
 java
 123
`;
console.log("m1:"+m1);
   /*
   结果
   m1:hello
   world
   java
   123*/


//var 和let的区别
   for(var i = 0; i < 5; i++){
       console.log(i);
   }
   console.log("var循环外：" + i);   //5


   for(let k = 0; k < 5; k++){
       console.log(k);
   }
   //console.log("let循环外：" + k); // k is not defined   报错

    const  j=123;
   // j =321;   //报错  提示信息    尝试分配给常量或只读变量

   let str="hello.world";
   let flag= str.includes("w");
   console.log("falg:"+flag);//falg:true
   let f=str.includes("hello");
   console.log("f:"+f);
   let s=str.startsWith("hell");
   console.log("startsWith:"+s);
   let ld=str.endsWith("rld");
   console.info("ld:"+ld);

   //结构表达式
   let ar=[1,2,3];
   const [x,y,z]=ar;//把ar的值赋值给x y z
   console.log(x,y,z);//输出x y z的值

    //对象解构
   const person = {
       name1:"jack",
       age1:21,
       language: ['java','js','css']
   }
   // 解构表达式获取值
   const {name1,age1,language} = person;
   // 打印
   console.log(name1);
   console.log(age1);
   console.log(language);
   const  {name1:n}=person;//name1是person中的属性名，冒号后面的n是解构后要赋值给的变量。
   console.log(n);  //输出变量对应的值

   //给参数初始化b  es6前不能初始化值
   function add1(a , b) {
       // 判断b是否为空，为空就给默认值1
       console.log("a:"+a+",b:"+b);
       b = b || 1;
       return a + b;
   }
   // 传一个参数
   console.log(add1(10));

   function add2(a , b = 1) {
       console.log("a:"+a+",b:"+b);
       return a + b;
   }
   // 传一个参数
   console.log(add2(10));

   //简化方法
   //原始的写法
   var print = function (obj) {
       console.log(obj);
   }
   //简化的写法
   let print1 = (obj) =>{console.log(obj)};
   print("123");
   print1("456");

   //多个参数
   var sum1=function(a,b){
      return a+b;
   }

   let sum2 =(a,b) =>{
       return a+b;
   }

   console.info(sum1(1,2));
   console.log(sum2(3,4));

   //对象的方法的简写
   let person1 = {
       name2: "jack",
       // 以前：
       eat: function (food) {
           console.log(this.name2 + "在吃" + food);
       },
       // 箭头函数版：
       eat2: food => console.log(person1.name2 + "在吃" + food),// 这里拿不到this
       // 简写版：
       eat3(food){
           console.log(this.name2 + "在吃" + food);
       }
   }
   person1.eat("早餐");
   person1.eat2("午餐");
   person1.eat3("晚饭");

   //map
   let arr = ['1','20','-5','3'];
   console.log(arr);
   arr=arr.map(s=>parseInt(s));//把map的字符串元素转换成int类型
   console.log("arr:"+arr);

   //reduce
   const arr1 = [1,20,-5,3];
   let re= arr1.reduce((a,b)=>a+b);
   console.log("re:"+re);
   let re1=arr1.reduce((a,b)=>a*b);
   console.log("re1:"+re1);
</script>
</body>
</html>